package 牛客.链表;/*
 *@Author: helen
 *@Date:   2021/4/23 10:41
 *@Description:
 题目描述
    对于一个给定的链表，返回环的入口节点，如果没有环，返回null
    拓展：
    你能给出不利用额外空间的解法么？
 */
public class 链表中环的入口点 {
        public ListNode detectCycle(ListNode head) {
            if (head == null) {
                return null;
            }
            ListNode slow = head;
            ListNode fast = head;
            ListNode Entry = null;
            while (fast.next != null && fast.next.next != null) {
                slow = slow.next;
                fast = fast.next.next;
                if (fast == slow) {  //快慢指针相遇，有环
                    Entry = slow;
                    break;
                }
            }
            if (Entry == null) {
                return null;
            }
            fast = head;  //快指针从头开始，与慢指针相遇时，则为入口点
            while (fast != slow) {
                fast = fast.next;
                slow = slow.next;
            }
            return fast;
        }
}
